package action;

import controller.Action;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import model.Aluno;
import model.Curso;
import util.ConverteData;
import util.Estados;

public abstract class ManterAlunoAction extends Action {

    @Override
    public void prepararOperacao(HttpServletRequest request, HttpServletResponse response) throws ServletException {
        try {
            String action = request.getParameter("action");
            request.setAttribute("action", action);
            setParametros(request, response);          
            request.setAttribute("cursos", Curso.obterCursos());
            List<Enum> estados = new ArrayList<Enum>();
            estados.addAll(Arrays.asList(Estados.values()));

            request.setAttribute("estados", estados);

            RequestDispatcher view = request.getRequestDispatcher("/manterAluno.jsp");
            view.forward(request, response);
        } catch (ServletException e) {
            throw e;
        } catch (IOException e) {
            throw new ServletException(e);
        } catch (SQLException e) {
            throw new ServletException(e);
        } catch (ClassNotFoundException e) {
            throw new ServletException(e);
        }
    }

    @Override
    public void confirmarOperacao(HttpServletRequest request, HttpServletResponse response) throws ServletException {
        try {
            
            int matricula = Integer.parseInt(request.getParameter("matricula"));
            String nomeAluno = request.getParameter("nome");
            Date dataNascimento = ConverteData.converte(request.getParameter("dataNascimento"));
            String logradouro = request.getParameter("logradouro");
            int numero = 0;
            if (!request.getParameter("numero").equals("")) {
                numero = Integer.parseInt(request.getParameter("numero"));
            }
            String complemento = request.getParameter("complemento");
            String bairro = request.getParameter("bairro");
            String cep = request.getParameter("cep");
            String cidade = request.getParameter("cidade");
            String estado = request.getParameter("estado");
            String rg = request.getParameter("rg");
            String cpf = request.getParameter("cpf");
            String email = request.getParameter("email");
            int anoIngresso = Integer.parseInt(request.getParameter("anoIngresso"));
            int semestreIngresso = Integer.parseInt(request.getParameter("semestreIngresso"));
            String status = request.getParameter("status");
            int posicaoVestibular = Integer.parseInt(request.getParameter("posicaoVestibular"));
            int codCurso = Integer.parseInt(request.getParameter("curso"));
            Aluno aluno = new Aluno(matricula, nomeAluno, dataNascimento,
                    logradouro, numero, complemento, bairro, cep, cidade, estado, rg, cpf, email,
                    anoIngresso, semestreIngresso, status, posicaoVestibular, Curso.obterCurso(codCurso));
            efetuaPersistencia(aluno);
            RequestDispatcher view = request.getRequestDispatcher("FrontController?action=PesquisarAluno");
            view.forward(request, response);
        } catch (ServletException e) {
            throw e;
        } catch (IOException e) {
            throw new ServletException(e);
        } catch (SQLException e) {
            throw new ServletException(e);
        } catch (ClassNotFoundException e) {
            throw new ServletException(e);
        }
    }

    public abstract void setParametros(HttpServletRequest request, HttpServletResponse response) throws ServletException;

    public abstract void efetuaPersistencia(Aluno aluno) throws ServletException;

}
